home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / rbbs_pc / mfix0712.zip / ANSICHAT.BAS next >
BASIC Source File  |  1992-07-12  |  9KB  |  241 lines

  1. ' $title: 'ANSIChat Split Screen Chat for RBBS-PC v17.4'
  2. '          By Dan Drinnon 8:903/2 1:313/6
  3. '
  4. '          Copyright 1992 by Daniel T. Drinnon   All Rights Reserved
  5. '
  6. '          DO NOT Distribute in Modified Form!
  7. '
  8. ' Revisions: 1.01 - added support to handle Sysop's Shell to DOS (F2)
  9. '
  10. '            1.02 - Prevent F10 from Loading another ANSIChat
  11. '                   Keep ANSIChat from showing 'RBBS' if that is already
  12. '                   part of the BBS name.
  13. '                   added support for Sysop's PgUp/PgDn (RBBSSUB3.BAS)
  14. '                   Combined local and remote input routines - thanks Scott!
  15. '
  16. '            1.03 - Greater control over ANSI colors when ANSITest = ZTrue
  17. '                    but user is not set up for ANSI Color Graphics.
  18. '
  19. '
  20. ' $INCLUDE: 'RBBS-VAR.MOD'
  21. '
  22. ' $SUBTITLE: 'ANSIChat - ANSI Split Screen Chat Routine'
  23. '
  24. ' $PAGE
  25. '
  26. '  SUBROUTINE NAME    -- ANSIChat
  27. '
  28. '  INPUT PARAMETERS   -- None
  29. '
  30. '  OUTPUT PARAMETERS  -- None
  31. '
  32. '  SUBROUTINE PURPOSE -- Allows Split Screen ANSI Chat for RBBS
  33. '
  34. '
  35. DIM ZANSIRow(1), ZANSICol(1), ACColor$(1), HoldInput$(1), StartRow(1)
  36. DIM MaxRow(1), WasX$(1)
  37.  
  38. Common Shared ZANSIRow(), ZANSICol(), ACColor$(), HoldInput$(), StartRow()
  39. Common Shared MaxRow(), WasX$()
  40. Common Shared LocalOut, RemoteOut, SideOut
  41. Common Shared MenuColor1$, MenuColor2$
  42. '
  43. 1000 SUB ANSIChat STATIC
  44. '
  45.      LocalOut = 0
  46.      RemoteOut = 1
  47.      SideOut = LocalOut
  48.      ZANSIRow(LocalOut) = 2
  49.      ZANSIRow(RemoteOut) = 14
  50.      ZANSICol(LocalOut) = 1
  51.      ZANSICol(RemoteOut) = 1
  52.      ACColor$(LocalOut) = ZEscape$ + "[1;32;40m"                     ' 1.03
  53.      ACColor$(RemoteOut) = ZEscape$ + "[1;33;40m"                    ' 1.03
  54.      ZWasCM = ZTrue
  55.      TimeChatStarted! = TIMER
  56.      ZSubParm = 1
  57.      HoldColorReset$ = ZColorReset$
  58.      MenuColor1$ = ZEscape$ + "[1;33;44m"                            ' 1.03
  59.      MenuColor2$ = ZEscape$ + "[1;36;44m"                            ' 1.03
  60.      ZColorReset$ = MenuColor2$                                      ' 1.03
  61.      CALL ANSIMenu
  62.      CALL ANSILocate (ZANSIRow(LocalOut),ZANSICol(LocalOut))
  63.      CALL QuickTPut1 (ACColor$(LocalOut) + ZSysopGreeting$)
  64.      CALL SplitScreenChat
  65.      ZWasCM = 0
  66.      CALL CheckTime(TimeChatStarted!,Elapsed!, 2)
  67.      ZSecsPerSession! = ZSecsPerSession! + Elapsed!
  68.      IF NOT ZLocalUser THEN _
  69.         ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect
  70.      CALL ClearANSIScreen
  71.      CALL QuickTPut(ZCrLF$ + "Chat over.  BBS resuming",2)
  72.      ZColorReset$ = HoldColorReset$
  73.      END SUB
  74. '
  75. 4000 SUB ANSIMenu STATIC
  76. '
  77.      LineBar$ = ""
  78.      FOR I= 1 to 80
  79.         LineBar$="▒" + LineBar$
  80.      NEXT I
  81.      CALL ClearANSIScreen
  82.      CALL ANSILocate (1,1)
  83.      CALL QuickTPut (MenuColor2$ + LineBar$,0)                       ' 1.03
  84.      IF INSTR(ZRBBSName$,"BBS") <> 0 THEN _                          ' 1.02
  85.         ZOutTxt$ = "░*>>> " + ZRBBSName$ + " ANSI Chat <<<*░" _      ' 1.02
  86.      ELSE _                                                          ' 1.02
  87.         ZOutTxt$ = "░*>>> " + ZRBBSName$ + " RBBS ANSI Chat <<<*░"   ' 1.02
  88.      temppos = (40 - (LEN(ZOutTxt$)/2))
  89.      CALL ANSILocate (1,temppos)
  90.      CALL QuickTPut (MenuColor1$ + ZOutTxt$,0)                       ' 1.03
  91.      CALL ANSILocate (13,1)
  92.      CALL QuickTPut (MenuColor2$ + LineBar$,0)                       ' 1.03
  93.      CALL ANSILocate (13,3)
  94.      CALL QuickTPut (MenuColor2$ + "░" + ZSysopFirstName$ + " " + ZSysopLastName$ + "░",0) ' 1.03
  95.      CALL ANSILocate (13,43)
  96.      CALL QuickTPut (MenuColor2$ + "░" + ZActiveUserName$ + "░",0) ' 1.03
  97.      CALL Line25
  98.      END SUB
  99. '
  100. 5000 SUB ClearANSIScreen STATIC
  101. '
  102.      CALL QuickTPut ("",0)                          ' 1.03
  103.      ZSubParm = 2
  104.      CALL Line25
  105.      ZSubParm = 0
  106.      CALL ANSILocate (1,1)
  107.      END SUB
  108. '
  109. 6000 SUB ANSILocate (ANSIRow,ANSICol) STATIC
  110. '
  111.      CALL QuickTPut ("" + MID$(STR$(ANSIRow),2) + ";" + MID$(STR$(ANSICol),2) + "H",0)
  112.      END SUB
  113. '
  114. 8000 SUB SplitScreenChat STATIC
  115. '
  116. 8001 HoldInput$(LocalOut) = ""                                       ' 1.01
  117.      HoldInput$(RemoteOut) = ""
  118.      MaxLen = 78
  119.      StartRow(LocalOut) = 2
  120.      StartRow(RemoteOut) = 14
  121.      MaxRow(LocalOut) = 12
  122.      MaxRow(RemoteOut) = 24
  123.      ZANSICol(LocalOut) = 1
  124.      ZANSICol(RemoteOut) = 1
  125.      ZANSIRow(LocalOut) = StartRow(LocalOut) + 1
  126.      ZANSIRow(RemoteOut) = StartRow(RemoteOut)
  127.      WasX$(LocalOut) = ""
  128.      WasX$(RemoteOut) = ""
  129.      ZWaitExpired = ZFalse
  130. '
  131. 8010 ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect
  132.      CALL Carrier
  133.      IF ZSubParm < 0 THEN _
  134.         EXIT SUB
  135. '
  136. 8020 CALL FindFKey
  137.      IF ZWasCM = 0 THEN _                                            ' 1.01
  138.         CALL FlushCom (ZCommPortStack$) : _                          ' 1.01
  139.         ZKeyPressed$ = "" : _                                        ' 1.01
  140.         CALL ANSIMenu : _                                            ' 1.01
  141.         ZWasCM = ZTrue : _                                           ' 1.01
  142.         GOTO 8001                                                    ' 1.01
  143.      SideOut = LocalOut
  144.      WasX$(LocalOut) = ZKeyPressed$
  145.      IF ZKeyPressed$ = ZEscape$ THEN _
  146.         EXIT SUB
  147.      IF WasX$(LocalOut) <> "" THEN _
  148.         GOTO 8060
  149. '
  150. 8030 IF ZLocalUser THEN _
  151.         GOTO 8010
  152.      SideOut = RemoteOut
  153.      IF ZCommPortStack$ <> "" THEN _
  154.         WasX$(RemoteOut) = LEFT$(ZCommPortStack$,LEN(ZCommPortStack$)-1) : _
  155.         GOTO 9000
  156.      CALL EofComm (Char)
  157.      IF Char <> -1 THEN _
  158.         GOTO 8050 _
  159.      ELSE _
  160.         GOTO 8010
  161. '
  162. 8050 ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect
  163.      SideOut = RemoteOut
  164.      CALL GetCom (WasX$(RemoteOut))
  165. '
  166. 8060 'Control keys
  167.      IF WasX$(SideOut) = CHR$(8) THEN _
  168.         GOTO 8500 _
  169.      ELSE IF WasX$(SideOut) = CHR$(9) THEN _
  170.         GOTO 8510 _
  171.      ELSE IF WasX$(SideOut) = CHR$(13) THEN _
  172.         GOTO 8520
  173.      GOTO 9000
  174. '
  175. 8500 'BackSpace
  176.      HoldInput$(SideOut) = ""
  177.      IF ZANSICol(SideOut) > 1 THEN _
  178.         ZANSICol(SideOut) = ZANSICol(SideOut) - 1
  179.      IF ZANSICol(SideOut) = 0 THEN _                                 ' 1.03
  180.         ZANSICol(SideOut) = MaxLen : _                               ' 1.03
  181.         ZANSIRow(SideOut) = ZANSIRow(SideOut) - 1                    ' 1.03
  182.      CALL ANSILocate (ZANSIRow(SideOut),ZANSICol(SideOut))
  183.      IF NOT ZLocalUser THEN _
  184.         CALL PutCom (" ")
  185.      CALL LPrnt (" ",0)
  186.      CALL ANSILocate (ZANSIRow(SideOut),ZANSICol(SideOut))
  187.      GOTO 8010
  188. '
  189. 8510 'TAB
  190.      HoldInput$(SideOut) = ""
  191.      IF ZANSICol(SideOut) + 5 > MaxLen THEN _
  192.         CALL AddRow (StartRow(SideOut),MaxRow(SideOut)) _
  193.      ELSE _
  194.         ZANSICol(SideOut) = ZANSICol(SideOut) + 5 : _
  195.         CALL ANSILocate (ZANSIRow(SideOut),ZANSICol(SideOut))
  196.      GOTO 8010
  197. '
  198. 8520 'CR
  199.      HoldInput$(SideOut) = ""
  200.      CALL AddRow (StartRow(SideOut),MaxRow(SideOut))
  201.      GOTO 8010
  202. '
  203. 9000 'Character Placement
  204.      HoldInput$(SideOut) = HoldInput$(SideOut) + WasX$(SideOut)
  205.      IF WasX$(SideOut) = " " THEN _
  206.         HoldInput$(SideOut) = ""
  207.      IF ZANSICol(SideOut) = MaxLen AND WasX$(SideOut) <> " " THEN _
  208.         CALL ANSILocate (ZANSIRow(SideOut),ZANSICol(SideOut) - LEN(HoldInput$(SideOut))) : _
  209.         CALL QuickTput("", 0) : _
  210.         CALL AddRow (StartRow(SideOut),MaxRow(SideOut)) : _
  211.         CALL QuickTPut (HoldInput$(SideOut),0) : _
  212.         ZANSICol(SideOut) = ZANSICol(SideOut) + LEN(HoldInput$(SideOut)) - 1 : _
  213.         WasX$(SideOut) = "" : _
  214.         HoldInput$(SideOut) = ""
  215.      CALL ANSILocate (ZANSIRow(SideOut),ZANSICol(SideOut))
  216.      IF NOT ZLocalUser THEN _
  217.         CALL PutCom (ACColor$(SideOut) + WasX$(SideOut))
  218.      CALL LPrnt (ACColor$(SideOut) + WasX$(SideOut),0)
  219.      ZANSICol(SideOut) = ZANSICol(SideOut) + 1
  220.      IF ZANSICol(SideOut) > MaxLen THEN _
  221.         CALL AddRow (StartRow(SideOut),MaxRow(SideOut))
  222.      WasX$(SideOut) = ""
  223.      GOTO 8010
  224.      END SUB
  225. '
  226. 10000 SUB AddRow (StartRow,MaxRow) STATIC
  227. '
  228.       ZANSICol(SideOut) = 1
  229.       ZANSIRow(SideOut) = ZANSIRow(SideOut) + 1
  230.       IF ZANSIRow(SideOut) > MaxRow THEN _
  231.          ZANSIRow(SideOut) = StartRow
  232.       IF ZANSIRow(SideOut) < MaxRow THEN _
  233.          CALL ANSILocate (ZANSIRow(SideOut) + 1,ZANSICol(SideOut)) : _
  234.          CALL QuickTput("", 0)
  235.       IF ZANSIRow(SideOut) = MaxRow THEN _
  236.          CALL ANSILocate (StartRow,ZANSICol(SideOut)) : _
  237.          CALL QuickTput("", 0)
  238.       CALL ANSILocate (ZANSIRow(SideOut),ZANSICol(SideOut))
  239.       END SUB
  240. '
  241.